草庐IT

c++ - DLL的开销

全部标签

windows - 如何从 SxS 缓存中删除未卸载的 DLL

我有VS2008。我升级到VS2010,然后卸载了VS2008。我有一个在我的机器上运行的测试,但无法在构建实验室的机器上加载。经过一些调试后,我意识到测试可执行文件仍然依赖于msvcr90d.dll(这是一个VC++2008调试运行时库)。即使我已经卸载了VS2008,该测试在我的机器上仍然有效,因为该运行时DLL仍然存在于并行缓存(%windir%/winsxs)中。构建实验室机器没有DLL,因此不会在那里加载。卸载VS2008不应该导致其所有运行时DLL从并排缓存中删除吗?有没有办法可以从并行缓存中手动删除这些旧的DLL?我希望能够轻松检测到我可能仍然有过时依赖项的其他地方。

c - 如何捕获读写系统调用?

每当我尝试在我的pendrive上写任何东西时,都会生成一个写系统调用。我想要做的是,应该捕获这个写入调用,并且应该要求用户输入预先确定的密码(我可以在编码过程中自行定义)。请告诉我这是否可能?如果是,我应该怎么做? 最佳答案 WindowsDDK有一个在filesys\minifilter中Hook文件读取/写入/复制的示例,同时包含操作前和操作后回调,您应该为内核方面设置这些回调。对于gui部分,您需要一些东西来进行非阻塞旋转,直到驱动器发出事件信号,您可能还需要管道或映射内存View来传递数据

c - 使用 CreateProcess,无法获取 CREATE_NO_WINDOW 来抑制控制台

我想在不弹出控制台窗口的情况下启动一个进程(为简单起见,我们将使用记事本)。我确定我错过了一些非常简单的东西,这是我最简化的测试用例:#include#include#includevoid_tmain(intargc,TCHAR*argv[]){STARTUPINFOsi;PROCESS_INFORMATIONpi;ZeroMemory(&si,sizeof(si));si.cb=sizeof(si);ZeroMemory(&pi,sizeof(pi));//Startthechildprocess.if(!CreateProcess(NULL,//Nomodulename(usec

windows - FPO 数据和系统 dll

我一直在研究调用堆栈,我注意到有时我会遇到FPO帧。dbgHelp可以以某种方式找出每个帧的结束位置及其符号,但我没有DLLS的PDBS,例如kernel32等。Windows中的系统DLL是否包含FPO数据?在客户的计算机上使用我的程序时可以依赖它吗?它们是否包含任何其他调试信息? 最佳答案 如果将符号路径设置为://msdl.microsoft.com/download/symbols,则系统DLL的公共(public)符号可用。IIRC许多Windows组件都是在关闭FPO的情况下编译的。但是你到底想完成什么?您在寻找什么“调

c - 绘画后 WM_PAINT 不显示

所以我正在绘制位图,这是我的代码:hdcMem=CreateCompatibleDC(hdc);SelectObject(hdcMem,g_hBitmap);GetObject(g_hBitmap,sizeof(bm),&bm);BitBlt(hdc,196-(bm.bmWidth/2),90,bm.bmWidth,bm.bmHeight,hdcMem,0,0,SRCCOPY);DeleteDC(hdcMem);有时,当我用这段代码绘制时,位图不显示。尽管如果我最小化/取消最小化窗口,则会显示位图。我很确定我的代码没有问题,那么我还应该做些什么吗?编辑:原来它不仅仅是位图,如果我用Te

windows - 同一系统上的 64 位和 32 位非托管 dll - 最佳实践?

我有一个内置于32位和64位的共享dll。两个版本都使用相同的名称foo.dll。如何在系统上同时安装foo.dll,以便我的32位和64位应用程序在其路径中找到正确的dll。Windows本身使用SysWOW64(用于32位dll)和System32(用于64位dll)。我想避免部署到这些文件夹。让两个位的dll在同一个盒子上共存并被链接到它们的适当应用程序找到的公认方式(如果有的话)是什么? 最佳答案 如果您不部署到受文件重定向影响的文件夹(即system32),那么您几乎需要为DLL指定不同的名称。这样做的原因是DLL搜索路径

调用 free 导致程序抛出异常

当我偶然发现以下问题时,我正在做作业。我应该使用C和WindowsAPI函数创建一个简单的多线程应用程序。每个线程都会运行一个简单的任务,所以我决定回收一些我做过的旧东西。我有一个头文件:http://pastebin.com/1aJFAwBg还有一个源文件:http://pastebin.com/L127FGhG然后在main中,我进行以下调用:LoadPoem();ProcessPoem();SavePoem();LoadPoem打开包含原始文件的文件,为输入分配一个缓冲区(变量loadedPoemBuffer)并将文件中的文本存储在其中。ProcessPoem然后为更改后的版本(

c - 从 dll 导出函数指针

我在一个dll文件中有一个函数指针(在实现中,而不是头文件中)。在exe源码中如何调用this指针指向的函数? 最佳答案 您可以导出返回指针的函数。header:typedefvoid(*MyPtr)();__declspec(dllexport)MyPtrGetMyPtr();来源:MyPtrGetMyPtr(){//retunrthefunctionpointerhere} 关于c-从dll导出函数指针,我们在StackOverflow上找到一个类似的问题:

c++ - 尝试从某个 COM 端口读取/写入时程序无法执行

我正在通过串行端口与宽带卡通信。我必须通过COM5读取GPS数据,并通过执行命令并读取COM3上的响应来获取信号强度。每当我尝试读取/写入COM3时,程序都无法执行。当我注释掉包含以下内容的行时:if(!WriteFile(hSerial2,wzBuff,7,&dZBytesRead,NULL))std::cout程序运行完美。完整代码如下:#include#include#include#include#include#includeusingnamespacestd;vectorfindLocation(stringstr,charcharacter);intmain(){time

c - Arduino 和 Windows 串行通信问题?

我正在从事一个项目,该项目涉及在连接到ArduinoMega设备的Windows732位平台上的VisualStudio2010Proffesional中实现的一些“c”串行通信(以控制一些硬件**与问题无关)。此代码100%有效;我遇到的唯一问题是我的串行通信发生了一些非常有趣的事情。VisualC程序如下。HANDLEhDevice=CreateFile(L"COM5",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,0);//OpenCOMhandle(createf